'##############
'Getriebe-Script
'##############

'Allison 2 speed Script 

'(c) 2008-2010 Rüdiger Hülsmann

'Script Version: 0.5
'Omsi release: 1.0

'Needs:
'- engine
'- bremse

'Revision History:
' Script based off of the script done by M & R for the Voith transmission 
'- Kyle Ortiz           04.11.2011      Allison two speed Script


'----------------------
'	Init
'----------------------

{macro:antrieb_init}
	1 (S.L.antrieb_getr_gangwahl) (S.L.antrieb_getr_gangvorwahl)
	1 (S.L.antrieb_getr_aktugang)
	
	0 (S.L.antrieb_wandler_moment)
{end}

'----------------------
'	Frame
'----------------------

{macro:antrieb_frame}

'Berechnen der Abtriebsdrehzahl
	(L.L.Wheel_RotationSpeed_1_L) (L.L.Wheel_RotationSpeed_1_R) + 2 / (C.L.antrieb_i_achse) * (S.L.antrieb_n_kardanwelle)

'Einlegen der Fahrstufe Loading the gear

	(L.S.GetTime) (L.L.antrieb_getr_gangwahlzeitpunkt) - (C.L.antrieb_gangwahlzeit) >
	(L.L.antrieb_getr_gangvorwahl) (L.L.antrieb_getr_gangwahl) = ! &&
	(L.L.antrieb_failure_general) ! &&
	{if}
			
		(L.L.antrieb_getr_gangwahl) 1 =
		{if}
			(L.L.engine_on) 1 = 
			{if}
				(L.L.engine_n) (S.L.antrieb_rucksoundvol)
				(C.L.antrieb_kuppl_M_dn_min) (S.L.antrieb_schaltmoment_soll)

				(L.L.antrieb_getr_gangvorwahl) 1 >
'Check if driveshaft is spinning Greater then Value assigned in consist file on  if it is, then play the sound clip
				{if}

					(L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd5) >
					
					{if}
						5 (S.L.antrieb_getr_aktugang)
						(T.L.ev_schaltruck)
					{else}
					(L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd4) >
					
					{if}
						4 (S.L.antrieb_getr_aktugang)
						(T.L.ev_schaltruck)
					{else}

					(L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd3) >
					
					{if}
						3 (S.L.antrieb_getr_aktugang)
						(T.L.ev_schaltruck)
					{else}
				       
					(L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd2) >
				        {if}
						2 (S.L.antrieb_getr_aktugang)
						(T.L.ev_schaltruck)
					{else}
							1 (S.L.antrieb_getr_aktugang)
							0 (S.L.antrieb_gear_engaged_timer)
							(T.L.ev_schaltruck)
								{endif}
							{endif}
						{endif}
					{endif}
				{else}
					(L.L.velocity) 5 <
					{if}
						1 (S.L.antrieb_getr_aktugang)
						0 (S.L.antrieb_gear_engaged_timer)
						(T.L.ev_schaltruck)
					{endif}
				{endif}
			{endif}
		{endif}	
		(L.L.antrieb_getr_gangvorwahl) (S.L.antrieb_getr_gangwahl)
	{endif}

'Gang rausnehmen, wenn Neutral angefordert

	(L.L.antrieb_getr_gangwahl) 1 =
	{if}
		0 (S.L.antrieb_getr_aktugang)
	{endif}
'Verhindern, dass der Rückwärtsgang oberhalb von 5 km/h eingelegt werden kann

	(L.L.antrieb_getr_gangvorwahl) 0 =
	(L.L.velocity) 5 >= &&
	{if}
		1 (S.L.antrieb_getr_gangwahl)
	{endif}







'Prüfen, ob Gang gewechselt wird - aber nur, wenn Getriebe heil ist:

	(L.L.antrieb_failure_general) !
	{if}
		(M.L.antrieb_getr_chkNxtGear)
	{endif}

'Berechnung des aktuellen Motordrehmoments:

	(M.L.engine_moment)



'Berechnung des dynamischen Schaltmoments

	(L.L.antrieb_getr_fest) !
	{if}
		(L.L.antrieb_schaltmoment) (L.S.Timegap) 1000 * + (L.L.antrieb_schaltmoment_soll) min (S.L.antrieb_schaltmoment)
	{endif}





'Fallunterscheidung, ob Getriebe reibt oder wandelt oder nicht:

	(L.L.antrieb_getr_fest)
	{if}

'#################################################################################
'	Berechnung der Beschleunigung des Antriebsstrangs (am Motorflansch) 
'     Calculate the acceleration of the drive train (on 'the flange)
'#################################################################################


		(L.L.n_Wheel) (L.L.antrieb_getr_ratio) * (L.L.engine_n) - 2 * pi * 60 / (L.S.Timegap) / 

'	Berechnung des Momentes am Motor durch Trägheit:

		(C.L.engine_J) * s0

'	Berechnung des vom Antriebsstrang durchgeleiteten Momentes

		l0 /-/ (L.L.engine_M) (L.L.engine_M_additional_load) - + s1


'	Wenn das Antriebsmoment zu groß ist oder ein Wandlergang eingelegt wird, rutscht die Kupplung durch:
'	If the torque is too large or a converter gear is engaged, the clutch slips:

		l1 abs (L.L.antrieb_schaltmoment) > (L.L.antrieb_getr_gangwahl) 1 <= || (L.L.antrieb_getr_aktugang) 1 = || (L.L.antrieb_getr_aktugang) 3 = || 


		{if}

			0 (S.L.antrieb_getr_fest)

		{else}

'		Setzen des Momentes
'		Setting the torque

			l1 (S.L.antrieb_getr_M_an)


'		Berechnung des Getriebeabtriebmomentes:
'		Calculation of the transmission output torque:

			(L.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (S.L.M_Wheel)

'		Drehzahl des Motors ergibt sich aus der Getriebeabtriebswelle:
'		Speed of the engine is obtained from the transmission output shaft:


			(L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (S.L.engine_n)		
		{endif}


		0 (S.L.antrieb_wandler_moment)

	{else}

'#################################################################################
'	Bestimmen, ob Leerlauf ist...: Determine if idle ...:
'#################################################################################

		(L.L.antrieb_getr_gangwahl) 1 = (L.L.antrieb_getr_aktugang) 0 = ||

		{if}

'		... Antriebs- und Getriebeantriebsmoment sind 0:
			0 (S.L.M_Wheel) (S.L.antrieb_getr_M_an)

			(M.L.engine_acceleration)
			0 (S.L.antrieb_wandler_moment)

'			Wenn Neutralgang beim Bremsen eingelegt wird
			(L.L.antrieb_getr_gangwahl) 1 =
			{if}
				0 (S.L.antrieb_retarder_wasrunning) (S.L.antrieb_gear_engaged_timer)
			{endif}

		{else}

'#################################################################################
'		Bestimmen, ob ein Wandlergang eingelegt ist...: Determine whether a converter gear is engaged
'#################################################################################

	(L.L.antrieb_wandler_engage) 1 = 	
		

			
			{if}

				(L.L.antrieb_wandler_moment) abs (L.L.antrieb_getr_M_an) abs >
				{if}
					(L.L.antrieb_wandler_moment) 0 >
					{if}
						(L.L.antrieb_getr_M_an) (C.L.antrieb_wandler_fillrate) (L.S.Timegap) * + (S.L.antrieb_getr_M_an)
						(L.L.antrieb_wandler_moment) (L.L.antrieb_getr_M_an) <
						{if}
							(L.L.antrieb_wandler_moment) (S.L.antrieb_getr_M_an)
						{endif}
					{else}
						(L.L.antrieb_getr_M_an) (C.L.antrieb_wandler_fillrate) (L.S.Timegap) * - (S.L.antrieb_getr_M_an)
						(L.L.antrieb_wandler_moment) (L.L.antrieb_getr_M_an) >
						{if}
							(L.L.antrieb_wandler_moment) (S.L.antrieb_getr_M_an)
						{endif}
					{endif}
				{else}
					(L.L.antrieb_wandler_moment) (S.L.antrieb_getr_M_an)
				{endif}
	
			
			

'#################################################################################
'			Wandler Rückwärtsgang: Reverse for Torque Conventer 
'#################################################################################

				(L.L.antrieb_getr_gangwahl) 0 =
				{if}
					(L.L.antrieb_n_kardanwelle) 2 * (S.L.antrieb_getr_n_ab) /-/ (L.L.engine_n) / (S.L.antrieb_wandler_ny)



							

'					Berechnung des Motor-Antriebsmomentes
'					Calculation of the motor drive torque

						(L.L.engine_n) 2 * 3.14 * 60 / (L.L.engine_n) 2 * 3.14 * 60 / * s1
						0.0042 (L.L.antrieb_wandler_ny) (F.L.antrieb_wandler_lambda) * l1 * (L.L.engine_n) (F.L.antrieb_wandler_lowrpmsoftness) * (S.L.antrieb_wandler_moment)


'					Berechnung des Rad-Abtriebsmomentes
'					Calculation of the wheel output torque
		
						(L.L.antrieb_wandler_ny) (F.L.antrieb_wandler_my) (L.L.antrieb_getr_M_an) * (C.L.antrieb_i_achse) * 0.9 * /-/ (L.L.engine_n) (F.L.antrieb_wandler_lowrpmsoftness) * (C.L.gear_efficiency) * 
					 	(L.L.antrieb_n_kardanwelle) (F.L.antrieb_reverse_torque_reduction) *
						(S.L.M_Wheel)
					

'#################################################################################
'			Wandler Vorwärtsgang:	Tweak
'#################################################################################

				{else}
					(L.L.n_Wheel) (L.L.antrieb_getr_ratio) * (S.L.antrieb_getr_n_ab) (L.L.engine_n) / (S.L.antrieb_wandler_ny)

					
'					Berechnung des Motor-Antriebsmomentes

						(L.L.engine_n) 2 * 3.14 * 60 / (L.L.engine_n) 2 * 3.14 * 60 / * s1
						0.0042 (L.L.antrieb_wandler_ny) (F.L.antrieb_wandler_lambda) * l1 * (L.L.engine_n) (F.L.antrieb_wandler_lowrpmsoftness) * (S.L.antrieb_wandler_moment)


'					Berechnung des Rad-Abtriebsmomentes
		
						(L.L.antrieb_wandler_ny) (F.L.antrieb_wandler_my) (L.L.antrieb_getr_M_an) * (L.L.antrieb_getr_ratio) * 0.77 * (L.L.engine_n) (F.L.antrieb_wandler_lowrpmsoftness) * (C.L.gear_efficiency) * (S.L.M_Wheel) 
					
				{endif}
		

'			Vergleich der Ein- und Ausgangsleistungen:
				(L.L.M_Wheel) (L.L.n_Wheel) * 3.14 * 30000 / (S.L.antrieb_gesamtleistung)
				(L.L.antrieb_gesamtleistung) (L.L.antrieb_motorleistung) / (S.L.antrieb_eta)

	
				(M.L.engine_acceleration)

			



'#################################################################################
'			Sonst ist ein normaler Gang eingelegt:
'			Otherwise, a normal gear is engaged:
'#################################################################################

			{else}


'			Berechnung der Drehzahldifferenz:

				(L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (L.L.engine_n) - s0



'			An dieser Stelle muss ggf. noch das unterschiedliche Kupplungsmoment eingesetzt werden:

				l0 0 <
				{if}
					(L.L.antrieb_schaltmoment)
				{else}
					(L.L.antrieb_schaltmoment) /-/
				{endif}
				(S.L.antrieb_getr_M_an)
				(L.L.antrieb_getr_ratio) *
				(C.L.gear_efficiency) * (S.L.M_Wheel)

				(M.L.engine_acceleration)

'			Prüfen, ob sich das Vorzeichen der Drehzahldifferenz umgekehrt hat:

				(L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (L.L.engine_n) - l0 * 0 <= (L.L.engine_n) 560 > &&
				{if}
					(L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (S.L.engine_n)
					(L.L.n_Wheel) (L.L.antrieb_getr_ratio) * (L.L.engine_n) - 2 * pi * 60 / (L.S.Timegap) / 

'					Berechnung des Momentes am Motor durch Trägheit:

					(C.L.engine_J) * s0

'					Berechnung des vom Antriebsstrang durchgeleiteten Momentes

					l0 /-/ (L.L.engine_M) (L.L.engine_M_additional_load) - + (S.L.antrieb_getr_M_an)


'					Berechnung des Getriebeabtriebmomentes:
'					Calculation of the transmission output torque:

					(L.L.antrieb_getr_M_an) abs (L.L.antrieb_schaltmoment) abs <
					{if}
						(L.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (S.L.M_Wheel)
						1 (S.L.antrieb_getr_fest)
						(C.L.antrieb_kuppl_M_up_max) (S.L.antrieb_schaltmoment)
					{else}
						(L.L.antrieb_schaltmoment) /-/ (S.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (S.L.M_Wheel)
					{endif}
					


				{endif}

				0 (S.L.antrieb_wandler_moment)

			{endif}
		{endif}

	{endif}


{end}



'#################################################################################
'	Bestimmung der Schaltgeschwindigkeiten
'#################################################################################

{macro:antrieb_getr_chkNxtGear}

'	Höchster Gang: s0!

'	Verzögerung der Kickdown-Schaltung:

	(L.L.throttle) 0.95 >=
	{if}
		(L.L.antrieb_kickdown_stellglied) (L.S.Timegap) 2 * + 1 min (S.L.antrieb_kickdown_stellglied)
		1 =
		{if}
			1 (S.L.antrieb_kickdown)
			(L.L.Throttle) 0.1 = &&
		{endif}
	{else}
		(L.L.antrieb_kickdown_stellglied) (L.S.Timegap) 1 * - 0 max (S.L.antrieb_kickdown_stellglied)
		0 =
		{if}
			0 (S.L.antrieb_kickdown)
		{endif}
	{endif}

'	Verzögerung der gaspedalabhängigen Schaltschwelle:

	
	(L.L.throttle) (L.L.antrieb_throttle_stellglied) >
	{if}
		(L.L.antrieb_throttle_stellglied) (L.S.Timegap) 1 * + (L.L.throttle) min (S.L.antrieb_throttle_stellglied)
	{else}
		(L.L.antrieb_throttle_stellglied) (L.S.Timegap) 0.5 * - (L.L.throttle) max (S.L.antrieb_throttle_stellglied)
	{endif}
	
'	Berechnen der aktuellen Beschleunigung:
	
	(L.L.Velocity) (L.L.antrieb_last_geschwindigkeit) - 3.6 / (L.S.Timegap) / (S.L.antrieb_beschleunigung)
	(L.L.Velocity) (S.L.antrieb_last_geschwindigkeit)
	
	



	(L.L.antrieb_getr_gangwahl) 0 =
	{if}
		
	{else}
	(L.L.antrieb_getr_gangwahl) 1 =
	{if}
		
	{else}
		(L.L.antrieb_getr_gangwahl) 2 =
		{if}
			(L.L.antrieb_retarder_armed) 0 =
			{if}
				1 s0
			{else}
				2 s0
			{endif}
		
		{else}
		(L.L.antrieb_getr_gangwahl) 3 =
		{if}
			2 s0
		{else}
			3 s0
		{endif}
                
		{else}
		(L.L.antrieb_getr_gangwahl) 4 =
		{if}
			3 s0
		{else}
			4 s0
		{endif}
		{else}
		(L.L.antrieb_getr_gangwahl) 5 =
		{if}
			4 s0
		{else}
			5 s0
		{endif}
	        {else}
		(L.L.antrieb_getr_gangwahl) 6 =
		{if}
			5 s0
		{else}
			6 s0
		{endif}


	{endif}


			(L.L.antrieb_getr_aktugang) s1

			1 =
			{if}
				(C.L.antrieb_getr_ratio1) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)
				      (C.L.antrieb_kuppl_M_up_max) s6
					(C.L.antrieb_kuppl_M_up_min) s7
					(M.L.antrieb_getr_schaltmoment) (S.L.antrieb_schaltmoment_soll)	(S.L.antrieb_schaltmoment)



					1150 s9
					1160 s8
			(M.L.antrieb_getr_chkCh1) (L.L.antrieb_n_kardanwelle) > 
			{if}
				1 (S.L.antrieb_wandler_engage)
				
				
			{endif}
				(L.L.antrieb_kickdown)
				{if}
					(C.L.antrieb_getr_autoSwUpkickdnSpd1) s3 s4
				{else}
					(C.L.antrieb_getr_autoSwUpMinSpd1) s4
					(C.L.antrieb_getr_autoSwUpMaxSpd1) s3
				{endif}
		
				(M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) < 
				{if}
					
					2 (S.L.antrieb_getr_aktugang)
					(C.L.antrieb_kuppl_M_up_max) s6
					(C.L.antrieb_kuppl_M_up_min) s7
					(M.L.antrieb_getr_schaltmoment) (S.L.antrieb_schaltmoment_soll)	(S.L.antrieb_schaltmoment)				
					(T.L.ev_gear_upshift2)
				{endif}


					1300 s9
					1300 s8
			(M.L.antrieb_getr_chkCh1) (L.L.antrieb_n_kardanwelle) < 
			{if}
				
				0 (S.L.antrieb_wandler_engage)
				
				
			{endif}

				(L.L.antrieb_kickdown_sense) 0.2 < (L.L.antrieb_wandler_engage) 0 = &&
				{if}
					(L.L.throttle) 0 * (S.L.engine_throttle_injection)

				{endif}

(L.L.antrieb_wandler_engage) 0 = 
{if}
(L.L.antrieb_kickdown_sense) (L.S.Timegap) 1 * + 5 min (S.L.antrieb_kickdown_sense)
{else}
0 (S.L.antrieb_kickdown_sense)
{endif}

			
			
				

				
			{endif}

'Add gear here 
l1 2 =
			{if}
				(C.L.antrieb_getr_ratio2) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)

				(L.L.antrieb_kickdown) l0 2 = ||
				{if}
					(C.L.antrieb_getr_autoSwDnkickdnSpd2) s3 s4
				{else}
					(C.L.antrieb_getr_autoSwDnMinSpd2) s4
					(C.L.antrieb_getr_autoSwDnMaxSpd2) s3
				{endif}
				(M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) >
				{if}
					1 (S.L.antrieb_getr_aktugang)
					10 (S.L.antrieb_schaltmoment)
				{endif}
			{endif}










	{endif}
	{endif}


'	Testweise: Differenzialdrehzahlpfeifen

	(L.L.engine_n) (L.L.antrieb_n_kardanwelle) 2 * - (S.L.antrieb_n_differenz)





{end}

{macro:antrieb_getr_chkCh}
'	Berechnung der aktuellen Hochschaltschwelle: (l3 = bei Vollgas, l4 = bei Leergas)
	(L.L.antrieb_throttle_stellglied) s2 l3 * 1 l2 - l4 * +
{end}

{macro:antrieb_getr_chkCh1}
'	Berechnung der aktuellen Hochschaltschwelle: (l3 = bei Vollgas, l4 = bei Leergas)
	(L.L.antrieb_throttle_stellglied) s2 l8 * 1 l2 - l9 * +
{end}

{macro:antrieb_getr_schaltmoment}
'	Berechnung des Schaltmomentes (l6 = bei Vollgas, l7 = bei Leergas)
	(L.L.antrieb_throttle_stellglied) s5 l6 * 1 l5 - l7 * +
{end}




{macro:antrieb_throttlelimitor}
(L.L.throttle) (C.L.partialthrottle_rate) >=
					{if}
					(L.L.engine_throttle_injection) 0.99 * (S.L.engine_throttle_injection)
					{endif}
{end}

{macro:antrieb_throttlegovernor}
(L.L.engine_throttle_injection) 0.78 >=
					{if}
					(C.L.throttleinjection_governor) (S.L.engine_throttle_injection)
					{endif}
{end}






{macro:antrieb_kickdown_time}

	 	
(L.L.antrieb_kickdown_sense) (L.S.Timegap) 1 * + 5 min (S.L.antrieb_kickdown_sense)
		

		
		
	 {endif}
	

	
{end}


